use bevy::prelude::*;

// 添加数字孪生消息事件
/// 数字孪生消息事件
///
/// 用于从外部系统向特定坦克实体发送消息
#[derive(Event)]
pub struct DigitalTwinMessage {
    /// 目标坦克的ID
    pub tank_id: usize,
    /// 消息内容
    pub message: String,
}

impl bevy::ecs::event::BufferedEvent for DigitalTwinMessage {
    // fn apply(&self, world: &mut bevy::prelude::World) {
    //     // 获取所有坦克和位置组件的查询
    //     let mut query = world.query::<(&Tank, &mut Location)>();
    //
    //     // 遍历所有匹配的实体
    //     for (tank, mut location) in query.iter_mut(world) {
    //         if tank.id == self.tank_id {
    //             info!("Tank {} received message: {}", tank.id, self.message);
    //             // 示例：根据消息内容更新坦克位置
    //             if self.message.starts_with("MOVE_TO:") {
    //                 let coords: Vec<&str> = self.message.split(":").nth(1).unwrap().split(",").collect();
    //                 if coords.len() == 2 {
    //                     if let (Ok(x), Ok(y)) = (coords[0].parse::<f32>(), coords[1].parse::<f32>()) {
    //                         // 更新位置
    //                         location.x = x;
    //                         location.y = y;
    //                         info!("Tank {} moved to ({}, {})", tank.id, x, y);
    //                     }
    //                 }
    //             }
    //             break;
    //         }
    //     }
    // }
}